package dibujo;

import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Iterator;
import java.util.Vector;

import org.uc3m.ed.tad.lista.IListaIterador;
import org.uc3m.ed.tad.lista.ListaOrdenada;
import org.uc3m.es.interfaz_grafica.ventana.PanelDibujo;

import panel.PanelDibujoLOrdenada;



public class DibujoListaOrdenada  {

	private Vector<NodoDibujo> _elementos;
	
	private NodoCabeceraCola _cabecera; 
	
	private int _desplazamientoX;
	
	private PanelDibujoLOrdenada _panelDibujo;
	
	public DibujoListaOrdenada()
	{
		_elementos=null;
		_cabecera=null;
	}
	public void setPanel(PanelDibujoLOrdenada panelDibujo){
		_panelDibujo=panelDibujo;
	}
	@SuppressWarnings("unchecked")
	public void dibujar(Graphics grafico, ListaOrdenada<Integer> estructura) {
		_desplazamientoX=0;
		IListaIterador<Integer> it=null;
		Iterator<NodoDibujo> it2;
		if (!estructura.estaVacia())
		{
			_elementos=new Vector<NodoDibujo>();
			
			it = estructura.iterador();
			while(it.haySiguiente())
				_elementos.add(new NodoDibujo(grafico,it.siguiente().toString()));
				
			configurarNodos();
			
			it2 = _elementos.iterator();
			while(it2.hasNext())
				it2.next().crearNodo();
			
			_cabecera= new NodoCabeceraCola(grafico.create(),_elementos.firstElement(),_elementos.lastElement());
			
		}
		else
			_cabecera= new NodoCabeceraCola(grafico,null,null);

		
		configurarCabecera();
		_cabecera.setPanel((PanelDibujo) _panelDibujo);
		_cabecera.crearCabeceraCola();
	}

	private void configurarNodos() {
		int numNodo=1;
		Iterator<NodoDibujo> it=_elementos.iterator();
		NodoDibujo anterior=it.next(),siguiente=null;
		_desplazamientoX=anterior.getAnchoNodo()+40;
		anterior.setPosicionX(50);
		anterior.setPosicionY(100);
		anterior.setPosicion(0);
		while(it.hasNext())
		{
			if ((numNodo%5)==0)
			{
				siguiente=it.next();
				siguiente.setPosicionX(50);
				siguiente.setPosicionY(anterior.getPosicionY()+anterior.getAltoNodo()+40);
				siguiente.setAnterior(anterior);
				siguiente.setPosicion(numNodo);
				anterior.setSiguiente(siguiente);
				anterior=siguiente;
				
			}
			else
			{
				siguiente=it.next();
				siguiente.setPosicionX(anterior.getPosicionX()+anterior.getAnchoNodo()+_desplazamientoX);
				siguiente.setPosicionY(anterior.getPosicionY());
				siguiente.setAnterior(anterior);
				siguiente.setPosicion(numNodo);
				anterior.setSiguiente(siguiente);
				anterior=siguiente;
			}
			numNodo++;
			if ((anterior.getPosicionX()+anterior.getAnchoNodo()+20)>_panelDibujo.getWidth())
				_panelDibujo.setSize(new Dimension(anterior.getPosicionX()+anterior.getAnchoNodo()+80, _panelDibujo.getHeight()));
			if ((anterior.getPosicionY()+anterior.getAltoNodo()+20)>_panelDibujo.getHeight())
				_panelDibujo.setSize(_panelDibujo.getWidth(), anterior.getPosicionY()+anterior.getAltoNodo()+80);
		}
		
	}
	
	private void configurarCabecera() {
		_cabecera.setPosicionX((_panelDibujo.getWidth()/2)-(_cabecera.getAnchoNodo()/2));
		_cabecera.setPosicionY(10);
	}
	
	

	


}
